home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 43 / Amiga Format CD43 (1999)(Future Publishing)(GB)(Track 1 of 2)[!][issue 1999-09].iso / -serious- / hardware / camedia / camedia.h < prev    next >
C/C++ Source or Header  |  1999-06-14  |  12KB  |  422 lines

  1. #ifndef CAMEDIA_H
  2. #define CAMEDIA_H
  3.  
  4. #define OK 1
  5. #define ERROR -1
  6. #define TIMEOUT_ERROR -2
  7. #define RETRY_ERROR -3
  8. #define READ_TOO_FEW_ERROR -4
  9. #define NULL_PTR_ERROR -5
  10.  
  11. #define TIMEOUT 5 /* five seconds */
  12. #define MAX_RETRIES 3 /* if something goes wrong three times in same cmd, then stop it */
  13.  
  14. #define Camera_Signature 0x15
  15. #define Camara_Action_Complete_Notification 0x05
  16. #define Camera_Positive_Achnowledgement 0x06
  17. #define Camera_Termination_Byte 0xff
  18. #define Camera_Unable_to_Execute_Command 0x11
  19.  
  20. #define Computer_Initialization_Byte 0x00
  21. #define Computer_Positive_Achnowledgement 0x06
  22. #define Computer_Negative_Achnowledgement 0x15
  23. #define Computer_Termination_Byte 0xffg
  24.  
  25. #define Packet_Not_Last_in_Seq 0x02
  26. #define Packet_Last_in_Seq 0x03
  27. #define Packet_Command 0x1b
  28. #define Packet_Subtype_First_Command 0x53
  29. #define Packet_Subtype_Not_First_Command 0x43
  30.  
  31. /* Register definition */
  32.  
  33. /* Command_0 - SetIntgerRegister(..) */
  34. enum Command_0 {
  35.  Cmd_Set_Resolution=1,
  36.  Cmd_Set_Clock,
  37.  Cmd_Set_Shutter_Speed,
  38.  Cmd_Set_Current_Frame_Number,
  39.  Cmd_Set_Aperture,
  40.  Cmd_Set_Color_Mode,
  41.  Cmd_Set_Flash_Mode,
  42.  Cmd_Set_Comm_Speed=17, 
  43.  Cmd_Set_Bright_And_Contrast=19,
  44.  Cmd_Set_White_Balance,
  45.  Cmd_Set_Autoshut_on_Host_Timer=23,
  46.  Cmd_Set_Autoshut_on_Field_Timer=24,
  47.  Cmd_Set_LED=30,
  48.  Cmd_Set_Lens_Mode=33,
  49.  Cmd_Set_Date_Format=41,
  50.  Cmd_Set_Exp_Meter=70,
  51.  Cmd_Set_Optical_Mode=72};
  52.  
  53.  
  54. /* Command_1 - ReadIntgerRegister(..) */
  55.  enum Command_1 {
  56.  Cmd_Get_Resolution=1,
  57.  Cmd_Get_Clock,
  58.  Cmd_Get_Shutter_Speed,
  59.  Cmd_Get_Aperture=5,
  60.  Cmd_Get_Color_Mode,
  61.  Cmd_Get_Flash_Mode,
  62.  Cmd_Get_Num_of_Frames_Taken=10,
  63.  Cmd_Get_Num_of_Frames_Left,
  64.  Cmd_Get_Length_of_Current_Frame,
  65.  Cmd_Get_Length_of_Current_Thumbnail,
  66.  Cmd_Get_Battery_Capacity=16,
  67.  Cmd_Get_Comm_Speed, 
  68.  Cmd_Get_Bright_And_Contrast=19,
  69.  Cmd_Get_White_Balance,
  70.  Cmd_Get_Autoshut_on_Host_Timer=23,
  71.  Cmd_Get_Autoshut_on_Field_Timer=24,
  72.  Cmd_Get_Available_Memory_Left=28,
  73.  Cmd_Get_Lens_Mode=33,
  74.  Cmd_Get_LCD_Brightness=35,
  75.  Cmd_Get_LCD_Autoshut_Timer=38,
  76.  Cmd_Get_Protect_State_of_Current_Frame,
  77.  Cmd_Get_Date_Format=41,
  78.  Cmd_Get_Exp_Meter=70,
  79.  Cmd_Get_Optical_Mode=72};
  80.  
  81.  
  82. /* Command_3 - SetVDRegister(..) */
  83. enum Command_3 {
  84.     Cmd_Set_Camera_ID=22,
  85.     Cmd_Set_Serial_Number=25, 
  86.     Cmd_Set_Model,
  87.     Cmd_Set_Upload_Image=29}; 
  88.  
  89.  
  90. /* Command_4 - ReadVDRegister(..) */    
  91. enum Command_4 {
  92.     Cmd_Get_Current_Frame=14,
  93.     Cmd_Get_Current_Thumbnail,
  94.     Cmd_Get_Camera_ID=22,
  95.     Cmd_Get_Serial_Number=25,
  96.     Cmd_Get_Version,
  97.     Cmd_Get_Model,
  98.     Cmd_Get_Audio_Data=44, /* not supported by many cameras */
  99.     Cmd_Get_Camera_Summery_Data=46,
  100.     Cmd_Get_Picture_Summery_Data,
  101.     Cmd_Get_Manufacturer};
  102.     
  103.  
  104. enum Resolution {
  105.     Unknown_Resolution=-1,
  106.     Standard_Resolution=1,
  107.     High_Resolution,
  108.     Extended_Resolution};
  109.  
  110. enum Aperture {
  111.     Unknown_Aperture=-1,
  112.     Low_Aperture=1,
  113.     Midium_Aperture,
  114.     High_Aperture};
  115.  
  116. enum Color_Mode {
  117.     Unknown_Color_Mode=-1,
  118.     Color_Color_Mode=1,
  119.     BAW_Color_Mode=2};
  120.     
  121. enum Flash_Mode {
  122.     Unknown_Flash_Mode=-1,
  123.     Auto_Flash_Mode=0,
  124.     Force_Flash_Mode,
  125.     Off_Flash_Mode,
  126.     Anti_Red_Eye_Flash_Mode,
  127.     Slow_Sync_Flash_Mode};
  128.  
  129. enum Camera_Speed {
  130.     CAMERA_SPEED_Unknown=-1,
  131.     CAMERA_SPEED_INIT=0x0,
  132.     CAMERA_SPEED_9600=0x1,
  133.     CAMERA_SPEED_19200=0x2,
  134.     CAMERA_SPEED_38400=0x3,
  135.     CAMERA_SPEED_57600=0x4,
  136.     CAMERA_SPEED_115200=0x5};
  137.  
  138.  
  139. enum Bright_Contrast {
  140.     Unknown_Bright_Contrast=-1,
  141.     Normal_Bright_Contrast=0,
  142.     More_Bright_Bright_Contrast,
  143.     Less_Bright_Bright_Contrast,
  144.     More_Contrast_Bright_Contrast,
  145.     Less_Contrast_Bright_Contrast};
  146.  
  147. enum White_Balance {
  148.     Unknown_White_Balance=-1,
  149.     Auto_White_Balance=0,
  150.     Skylight_White_Balance=1,
  151.     Fluoresent_White_Balance=2,
  152.     Thungsten_White_Balance=3,
  153.     Cloudy_White_Balance=255};
  154.  
  155. enum Lens_Mode {
  156.     Unknown_Lens_Mode=-1,
  157.     Macro_Lens_Mode=1,
  158.     Normal_Lens_Mode,
  159.     Infinity_Fisheye_Lens_Mode};
  160.  
  161. enum Date_Format {
  162.     Unknown_Date_Format=-1,
  163.     YY_MM_DD_Date_Format=1,
  164.     DD_MM_HH_Date_Format};
  165.  
  166. enum Exp_Meter {
  167.     Unknown_Exp_Meter=-1,
  168.     Center_weighted_Exp_Meter=1,
  169.     Spot_Exp_Meter,
  170.     Multi_Element_Matrix_Exp_Meter=5};
  171.  
  172. enum LED_Mode {
  173.     Unknown_LED_Mode=-1,
  174.     Off_LED_Mode=0,
  175.     On_LED_Mode,
  176.     Blink_LED_Mode};
  177.  
  178.  
  179. #define L1 UBYTE
  180. #define L2 UWORD
  181. #define L4 ULONG 
  182.  
  183.  
  184. /* SetInteger MACROS  (all Frame Independant) */
  185.  
  186. #define MACRO_Set_Integer(cmd, value, error_msg)\
  187.     SetIntegerRegister(cmd, value, error_msg)\
  188.  
  189. /* GetInteger MACROS */
  190.  
  191. /* FD = Frame Dependant */
  192. #define MACRO_Get_FD_Integer(framenumber, cmd, error_msg)\
  193.     SetIntegerRegister(Cmd_Set_Current_Frame_Number, (L1) framenumber, error_msg);\
  194.     if (*error_msg==0)\  
  195.          ReadIntegerRegister(cmd, &r, error_msg)\
  196.  
  197. /* FI = Frame Independant */
  198. #define MACRO_Get_FI_Integer(cmd, error_msg)\
  199.     ReadIntegerRegister(cmd, &r, error_msg);\
  200.  
  201.  
  202. /* GetVData MACROS */
  203.  
  204. /* FD = Frame Dependant */
  205. #define MACRO_Get_FD_VData(framenumber, cmd, buffer, size, error_msg)\
  206.     SetIntegerRegister(Cmd_Set_Current_Frame_Number, (L1) framenumber, error_msg);\
  207.     if (*error_msg==0) \
  208.         ReadVDataRegister(cmd, (L1 *) buffer, (L4 *) size, error_msg)\
  209.     
  210.  
  211. /* FI = Frame Independant */
  212. #define MACRO_Get_FI_VData(cmd, buffer, size, error_msg)\
  213.     ReadVDataRegister(cmd, (L1 *) buffer, (L4 *) size, error_msg)\
  214.  
  215. /*
  216. struct Packet {
  217.     L1 Packet_type;
  218.     union {L1 Packet_subtype;
  219.              L1 Packet_sequence};
  220.     L2 Length_of_data;
  221.     Data *DataField;
  222.     L2 checksum;
  223. };
  224. */
  225.  
  226.  
  227. enum Action_Code {
  228.     AC_Erase_Last_Picture=0,
  229.     AC_Erase_All_Picture,
  230.     AC_Take_Picture,
  231.     AC_Finish_Session_Immediatly=4,
  232.     AC_Take_Preview_Snapshot,
  233.     AC_Erase_Current_Frame=7,
  234.     AC_Set_Protection_State=9,
  235.     AC_Store_Freshly_Upload_Image_Into_NVRAM=11};
  236.  
  237. struct Command_0_Packet {
  238.     L1 Packet_type;
  239.     L1 Packet_subtype;
  240.     L2 Length_of_data;
  241.  
  242. /* Begin of Command part */    
  243.     L1 Command_Code;
  244.     L1 Register_Number;
  245.     L4 NewValue;
  246. /* End of Command part */
  247.  
  248.     L2 checksum;
  249. };
  250.  
  251.  
  252. struct Command_1_Packet {
  253.     L1 Packet_type;
  254.     L1 Packet_subtype;
  255.     L2 Length_of_data;
  256.  
  257. /* Begin of Command part */    
  258.     L1 Command_Code;
  259.     L1 Register_Number;
  260. /* End of Command part */
  261.  
  262.     L2 checksum;
  263. };
  264.  
  265.  
  266. struct Command_2_Packet {
  267.     L1 Packet_type;
  268.     L1 Packet_subtype;
  269.     L2 Length_of_data;
  270.  
  271. /* Begin of Command part */    
  272.     L1 Command_Code;
  273.     L1 Action_Code;
  274.     L1 single_byte;
  275. /* End of Command part */
  276.  
  277.     L2 checksum;
  278. };
  279.  
  280. struct Command_3_Packet {
  281.     L1 Packet_type;
  282.     L1 Packet_subtype;
  283.     L2 Length_of_data;
  284.  
  285. /* Begin of Command part */    
  286.     L1 Command_Code;
  287.     L1 Register_Number;
  288.     L1 *vdata;
  289. /* End of Command part */
  290.  
  291.     L2 checksum;
  292. };
  293.  
  294. struct Command_4_Packet {
  295.     L1 Packet_type;
  296.     L1 Packet_subtype;
  297.     L2 Length_of_data;
  298.  
  299. /* Begin of Command part */    
  300.     L1 Command_Code;
  301.     L1 Register_Number;
  302. /* End of Command part */
  303.  
  304.     L2 checksum;
  305. };
  306.  
  307.  
  308.  
  309. void bootstrap(char *serial_device, int unit, char* error_msg);
  310. void clean(int entrypoint);
  311. void init(enum Camera_Speed cs, char* error_msg);
  312. void SetSerialSpeed(enum Camera_Speed, char* error_msg);
  313.  
  314. void read(L1 *, long, char* error_msg);
  315. __inline void read_L1(L1 *, char* error_msg);
  316. __inline void read_L2(L2 *, char* error_msg);
  317. __inline void read_L4(L4 *, char* error_msg);
  318.  
  319. __inline L2 SetL2(L2);
  320. __inline L4 SetL4(L4);
  321.  
  322. void send(L1 *, long, char* error_msg);
  323. __inline void send_L1(L1, char* error_msg);
  324. __inline void send_L2(L2, char* error_msg);
  325.  
  326. void print_bytes(L1 *, long);
  327. void save_Frame(int framenumber, char *name, char *comment, char* error_msg);
  328. void save_Thumbnail(int framenumber, char *name, char *comment, char* error_msg);
  329.  
  330. __inline L2 SetL2(L2 a) {
  331.         return (L2) ((((L1) (a & 0xff))<<8)+((L1) (a>>8)));
  332. }
  333.  
  334. __inline L4 SetL4(L4 a) {
  335.         return (L4) (((L1) (a & 0xff))<<24) + (((L1) ((a>>8) & 0xff))<<16) + (((L1) ((a>>16) & 0xff))<<8) + ((L1) (a>>24));
  336. }
  337.  
  338. __inline L2 checksum(L1 *, L1 *);
  339.  
  340. void SetIntegerRegister(enum Command_0, L4, char* error_msg);
  341. void ReadIntegerRegister(enum Command_1, L4 *, char* error_msg);
  342. void TakeAction(enum Action_Code action, L1 arg, char* error_msg);
  343. void ReadVDataRegister(enum Command_4, L1 *, L4 *, char* error_msg);
  344.  
  345.  
  346. /* SetInteger functions */
  347. void Set_Resolution(Resolution re, char* error_msg);
  348. void Set_Clock(time_t c, char* error_msg);
  349. void Set_Shutter_Speed(long ss, char* error_msg);
  350. /* Set_Current_Frame_Number doesn't make sense on this level */
  351. void Set_Aperture(enum Aperture a, char* error_msg);
  352. void Set_Color_Mode(enum Color_Mode cm, char* error_msg);
  353. void Set_Flash_Mode(enum Flash_Mode fm, char* error_msg);
  354. void Set_Comm_Speed(enum Camera_Speed cs, char* error_msg);
  355. void Set_Bright_And_Contrast(enum Bright_Contrast bc, char* error_msg);
  356. void Set_White_Balance(enum White_Balance wb, char* error_msg);
  357. void Set_Autoshut_on_Host_Timer(int aoht, char* error_msg);
  358. void Set_Autoshut_on_Field_Timer(int asoft, char* error_msg);
  359. void Set_LED(enum LED_Mode lm, char* error_msg);
  360. void Set_Lens_Mode(enum Lens_Mode lm, char* error_msg);
  361. void Set_Date_Format(enum Date_Format df, char* error_msg);
  362. void Set_Exp_Meter(enum Exp_Meter em, char* error_msg);
  363. void Set_Optical_Mode(int AEL_WBL, int Fisheye, int Wide, int Digital_Zoom, int BAW, char* error_msg);
  364.  
  365.  
  366. /* GetInteger functions */
  367. void Get_Resolution(Resolution *re, char* error_msg);
  368. void Get_Clock(time_t *c, char* error_msg);
  369. void Get_Shutter_Speed(long *ss, char* error_msg);
  370. void Get_Aperture(enum Aperture *a, char* error_msg);
  371. void Get_Color_Mode(enum Color_Mode *cm, char* error_msg);
  372. void Get_Flash_Mode(enum Flash_Mode *fm, char* error_msg);
  373. void Get_Num_of_Frames_Taken(int *noft, char* error_msg);
  374. void Get_Num_of_Frames_Left(int *nofl, char* error_msg);
  375. void Get_Length_of_Frame(int framenumber, long *locf, char* error_msg);
  376. void Get_Length_of_Thumbnail(int framenumber, long *loct, char* error_msg);
  377. void Get_Battery_Capacity(int *bc, char* error_msg);
  378. void Get_Comm_Speed(enum Camera_Speed *cs, char* error_msg);
  379. void Get_Bright_And_Contrast(enum Bright_Contrast *bc, char* error_msg);
  380. void Get_White_Balance(enum White_Balance *wb, char* error_msg);
  381. void Get_Autoshut_on_Host_Timer(int *aoht, char* error_msg);
  382. void Get_Autoshut_on_Field_Timer(int *asoft, char* error_msg);
  383. void Get_Available_Memory_Left(long *aml, char* error_msg);
  384. void Get_Lens_Mode(enum Lens_Mode *lm, char* error_msg);
  385. void Get_LCD_Brightness(int *lb, char* error_msg);
  386. void Get_LCD_Autoshut_Timer(int *lat, char* error_msg);
  387. void Get_Protect_State_of_Frame(int framenumber, int *psof, char* error_msg);
  388. void Get_Date_Format(enum Date_Format *df, char* error_msg);
  389. void Get_Exp_Meter(enum Exp_Meter *em, char* error_msg);
  390. void Get_Optical_Mode(int *AEL_WBL, int *Fisheye, int *Wide, int *Digital_Zoom, int *BAW, char* error_msg);
  391.  
  392.  
  393. /* GetVData functions */
  394. void Get_Frame(int framenumber, UBYTE *buffer, long *size, char* error_msg);
  395. void Get_Thumbnail(int framenumber, UBYTE *buffer, long *size, char* error_msg);
  396. void Get_Camera_ID(UBYTE *buffer, long *size, char* error_msg);
  397. void Get_Serial_Number(UBYTE *buffer, long *size, char* error_msg);
  398. void Get_Version(UBYTE *buffer, long *size, char* error_msg);
  399. void Get_Model(char *string, long *size, char* error_msg);
  400. void Get_Audio_Data(UBYTE *buffer, long *size, char* error_msg); /* not supported by many cameras */
  401. void Get_Camera_Summery_Data(enum Resolution *re, int *LCD_Brightness, int *Frames_Taken, char* error_msg);
  402. void Get_Picture_Summery_Data(int framenumber, long *AudioDataLength, enum Resolution *re, int *ProtectionState, time_t *TimeDate, char* error_msg);
  403. void Get_Manufacturer(char *string, long *size, char* error_msg);
  404.  
  405. /* Get_Preview function */
  406.  
  407. void Get_Preview(UBYTE *buffer, long *size, char* error_msg);
  408.  
  409. /* dump functions for printouts */
  410. char* dump_Resolution(enum Resolution r);
  411. char* dump_Aperture(enum Aperture a);
  412. char* dump_Color_Mode(enum Color_Mode cm);
  413. char* dump_Flash_Mode(enum Flash_Mode fm);
  414. char* dump_Camera_Speed(enum Camera_Speed cs);
  415. char* dump_Bright_Contrast(enum Bright_Contrast bc);
  416. char* dump_White_Balance(enum White_Balance wb);
  417. char* dump_Lens_Mode(enum Lens_Mode lm);
  418. char* dump_Date_Format(enum Date_Format df);
  419. char* dump_Exp_Meter(enum Exp_Meter em);
  420. char* dump_LED_Mode(enum LED_Mode lm);
  421.  
  422. #endif